package mx.ipn.presentacion.telefonista;

import mx.ipn.presentacion.ConexionConNegocios;
import mx.ipn.presentacion.Utilerias;

import mx.ipn.presentacion.telefonista.ui.Ui_Principal;

import com.trolltech.qt.gui.*;
import com.trolltech.qt.core.*;

import java.util.*;

import mx.ipn.to.*;

public class TelefonistaPrincipal extends QMainWindow {
	Ui_Principal ui = new Ui_Principal();
	UsuarioTO usuarioTO;
	ClienteDireccionTO clienteDireccionTO;
	ClienteTO[] clientes;
	DireccionTO[] direcciones;
	BitacoraServicioTO[] bitacora;
	ArrayList<BitacoraServicioTO> arrayListBitacora = new ArrayList<BitacoraServicioTO>();
	
	QTimer timer;
	QAction editarAction, cancelarAction;
	QPoint popupPoint = new QPoint();
	short revision = 0;

	// El widger de agregar o modificar direccion
	ABCDireccion abcDireccion;
	// El widget para dar de alta un cliente
	ACliente aCliente;
	// El widget para consultar en la bitacora
	BusquedaBitacora busquedaBitacora;

	Chat chat;

	// Relaciona el id de la direccion con el indice del comboBox
	HashMap<Integer, Integer> mapaDirecciones;
	// Relaciona el id de cliente direccion con el indice del comboBox
	HashMap<Integer, Integer> mapaClienteDireccion;
	// Relaciona el id del cliente con el indice del comboBox
	HashMap<Integer, Integer> mapaClientes;

	public TelefonistaPrincipal(UsuarioTO usuarioTO) {
		mapaDirecciones = new HashMap<Integer, Integer>();
		mapaClienteDireccion = new HashMap<Integer, Integer>();
		mapaClientes = new HashMap<Integer, Integer>();
		this.usuarioTO = usuarioTO;

		revision = 0;

		// pone la interfaz de usuario
		ui.setupUi(this);

		createActions();
		ui.tableWidgetBitacora
				.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu);

		// centra la ventana de acorde a la resolucion del monitor
		Utilerias.centrarVentana(this);

		llenarFormasPago();
		llenarTiposServicio();

		// conecta las señales de los menus mostrar ventana
		ui.actionAgregarServicio.triggered.connect(this,
				"mostrarWidgetAgregarServicio()");
		ui.actionBitacora.triggered.connect(this, "mostrarWidgetBitacora()");
		ui.actionRegistrar_Modificar_Direcci_n.triggered.connect(this,
				"mostrarWidgetABCDireccion()");
		ui.actionBuscarCambiar.triggered.connect(this,
				"mostrarDialogBusquedaBitacora()");
		ui.actionChat.triggered.connect(this, "mostrarWidgetChat()");
		ui.actionMapa.triggered.connect(this, "mostrarMapa()");

		ui.lineEditTelefono.returnPressed.connect(this, "slotLlenarClientes()");

		// conecta la señal de clientes con direcciones
		ui.comboBoxNombre.currentIndexChanged.connect(this,
				"llenarDirecciones(int)");

		// conecta la señal del boton con el slot agregarServicio
		ui.pushButtonAgregar.clicked.connect(this, "agregarServicio()");

		// conecta la señal de edicion de la fecha con el slot que configura la
		// fecha y tiempo minimos
		ui.dateTimeEditReservado.dateTimeChanged.connect(this,
				"asignarFechaTiempoMinima()");
		// asigna la fecha minima del campo de fecha reservado
		ui.dateTimeEditReservado.setDateTime(QDateTime.currentDateTime());

		timer = new QTimer();
		timer.start(10000);
		timer.timeout.connect(this, "llenarBitacoraPorRevision()");

		llenarBitacora();
	}

	// Asigna los rangos de la fecha para el campo reservado
	private void asignarFechaTiempoMinima() {
		ui.dateTimeEditReservado.setMinimumDate(QDate.currentDate());
		ui.dateTimeEditReservado.setMinimumTime(QTime.currentTime());
	}

	// Para agregar un servicio a la BD
	private void agregarServicio() {
		BitacoraServicioTO bitacora = new BitacoraServicioTO();

		// Obtiene y asigna la fecha y hora de captura
		java.util.Date fechaActual = new java.util.Date();

		bitacora.setFechaCaptura(fechaActual);
		bitacora.setHoraCaptura(fechaActual);

		// Obtiene y asigna el telefono actual
		bitacora.setTelefono(ui.lineEditTelefono.text());

		// Obtiene y asigna el id del cliente seleccionado
		bitacora.setIdCliente(mapaClientes
				.get(ui.comboBoxNombre.currentIndex()));

		// Direccion Origen
		bitacora.setIdClienteDireccion(mapaClienteDireccion
				.get(ui.comboBoxOrigen.currentIndex()));

		// Direccion Destino
		bitacora.setIdDireccionDestino(mapaDirecciones.get(ui.comboBoxDestino
				.currentIndex()));

		// Pidio factura?
		bitacora.setFactura(ui.checkBoxFactura.isChecked());

		// Observaciones
		bitacora.setObservaciones(ui.textEditObservaciones.toPlainText());

		// Forma de Pago
		bitacora
				.setIdFormaPago((short) (ui.comboBoxFormaDePago.currentIndex() + 1));

		// Tipo de Servicio
		bitacora.setIdTipoServicio((short) (ui.comboBoxTipoServicio
				.currentIndex() + 1));

		// Telefonista
		bitacora.setIdUsuarioTelefonista(usuarioTO.getIdUsuario());

		// Reservado?
		if (ui.checkBoxReservado.checkState() == Qt.CheckState.Checked) {
			bitacora.setFechaEntrada(Utilerias.toDate(ui.dateTimeEditReservado
					.dateTime()));
			bitacora.setHoraEntrada(Utilerias.toDate(ui.dateTimeEditReservado
					.dateTime()));
		} else {
			bitacora.setFechaEntrada(fechaActual);
			bitacora.setHoraEntrada(fechaActual);
		}
		// Status (PONER ESTO EN EL BO)
		bitacora.setIdStatus((short) 5);

		bitacora.setTiempo(15);

		TransferObject resp = (TransferObject) ConexionConNegocios
				.invocaServicio("agregarServicio", bitacora,
						TransferObject.class);

		if (resp.getTipoError() > 0)
			Utilerias.mostrarMensajeError(this, resp);
	}

	// para llenar la bitacora de servicios inicialmente
	private void llenarBitacora() {

		java.util.Date dia = new java.util.Date();

		// bitacora =
		PeticionBitacoraServiciosPorRevisionTO peticion = (PeticionBitacoraServiciosPorRevisionTO) ConexionConNegocios
				.invocaServicio("obtenerBitacoraServiciosPorDia", dia,
						PeticionBitacoraServiciosPorRevisionTO.class);

		if (peticion == null)
			System.out.println("nulo peticion");
		else {

			revision = peticion.getRevision();
			System.out.println("revision obtenida: " + revision);

			
			bitacora = peticion.getBitacora();

			if(bitacora==null)
				System.out.println("bitacora nulo");
			else{
			arrayListBitacora = new ArrayList<BitacoraServicioTO>( Arrays.asList( bitacora ) );

			for (int i = 0; i < arrayListBitacora.size(); i++) {
				if (ui.tableWidgetBitacora.rowCount() < i + 1)
					ui.tableWidgetBitacora.insertRow(i);

				llenarDatosBitacora(i, arrayListBitacora.get(i));
			}
			}
			System.out.println("paso");
		}

		System.out.println("paso2");

	}

	private void llenarBitacoraPorRevision() {
		// bitacora =
		PeticionBitacoraServiciosPorRevisionTO peticion = (PeticionBitacoraServiciosPorRevisionTO) ConexionConNegocios
				.invocaServicio("obtenerBitacoraServiciosPorRevision",
						revision, PeticionBitacoraServiciosPorRevisionTO.class);

		if(peticion!=null)
		
		if (peticion.getRevision() > revision) {
			revision = peticion.getRevision();
			System.out.println("revision obtenida: " + revision);

			short[] renglones = peticion.getRenglon();

			BitacoraServicioTO[] bitacora2 = peticion.getBitacora();

			if(bitacora2==null)
				System.out.println("bitacora2 nula");
			else{
			for (int i = 0; i < bitacora2.length; i++) {
				if (ui.tableWidgetBitacora.rowCount() < (renglones[i] + 1))
					ui.tableWidgetBitacora.insertRow(renglones[i]);

				arrayListBitacora.add(bitacora2[i]);				
				llenarDatosBitacora(renglones[i], bitacora2[i]);
			}
			}
			System.out.println("paso");
		}

		System.out.println("paso2");
	}

	private void llenarDatosBitacora(int renglon, BitacoraServicioTO bitacora) {
		ui.tableWidgetBitacora.setItem(renglon, 0, new QTableWidgetItem(Integer
				.toString(bitacora.getIdOperacion())));

		ui.tableWidgetBitacora.setItem(renglon, 1, new QTableWidgetItem(
				bitacora.getListTipoServicioTO()[0].getCategoriaServicioTO()
						.getNombre()
						+ " - "
						+ bitacora.getListTipoServicioTO()[0]
								.getSubcategoriaServicioTO().getNombre()
						+ " - "
						+ bitacora.getListTipoServicioTO()[0].getFactorTO()
								.getDescripcion()));

		// fechas
		String fechaCaptura = bitacora.getFechaCaptura().toString().substring(
				0, 11)
				+ bitacora.getHoraCaptura().toString().substring(11, 20)
				+ bitacora.getFechaCaptura().toString().substring(20);
		String fechaEntrada = bitacora.getFechaEntrada().toString().substring(
				0, 11)
				+ bitacora.getHoraEntrada().toString().substring(11, 20)
				+ bitacora.getFechaEntrada().toString().substring(20);

		// captura
		ui.tableWidgetBitacora.setItem(renglon, 2, new QTableWidgetItem(
				fechaCaptura));
		// asignacion
		if (bitacora.getFechaAsignacion() != null)
			ui.tableWidgetBitacora.setItem(renglon, 3, new QTableWidgetItem(
					bitacora.getFechaAsignacion().toString().substring(0, 11)
							+ bitacora.getHoraAsignacion().toString()
									.substring(11, 20)
							+ bitacora.getFechaAsignacion().toString()
									.substring(20)));
		else
			ui.tableWidgetBitacora
					.setItem(renglon, 3, new QTableWidgetItem(""));
		// cubierto
		if (bitacora.getFechaCubierto() != null)
			ui.tableWidgetBitacora.setItem(renglon, 4, new QTableWidgetItem(
					bitacora.getFechaCubierto().toString().substring(0, 11)
							+ bitacora.getHoraCubierto().toString().substring(
									11, 20)
							+ bitacora.getFechaCubierto().toString().substring(
									20)));
		else
			ui.tableWidgetBitacora
					.setItem(renglon, 4, new QTableWidgetItem(""));

		// reservacion
		if (fechaCaptura.compareTo(fechaEntrada) == 0) {
			QTableWidgetItem itemFechaEntrada = new QTableWidgetItem("no");
			itemFechaEntrada
					.setIcon(new QIcon(
							"classpath:mx/ipn/presentacion/recursos/iconos/cancel.png"));
			ui.tableWidgetBitacora.setItem(renglon, 5, itemFechaEntrada);

		} else
			ui.tableWidgetBitacora.setItem(renglon, 5, new QTableWidgetItem(
					fechaEntrada));

		ui.tableWidgetBitacora.setItem(renglon, 6, new QTableWidgetItem(
				bitacora.getListStatusTO()[0].getNombre()));
		ui.tableWidgetBitacora.setItem(renglon, 7, new QTableWidgetItem(
				bitacora.getListClienteTO()[0].getApellidoPaterno() + " "
						+ bitacora.getListClienteTO()[0].getApellidoMaterno()
						+ " " + bitacora.getListClienteTO()[0].getNombre()));
		ui.tableWidgetBitacora.setItem(renglon, 8, new QTableWidgetItem(
				bitacora.getTelefono()));

		// Direccion Origen
		DireccionTO d = bitacora.getListClienteDireccionTO()[0]
				.getListDireccionTO()[0];
		String direccion = new String();

		CalleTO[] calleTO = d.getColoniaCalleTO().getListCalleTO();
		for (CalleTO c : calleTO) {
			direccion = c.getNombre() + ", #" + d.getNumero() + ", I"
					+ d.getInterior();
		}

		ColoniaTO[] coloniaTO = d.getColoniaCalleTO().getListColoniaTO();
		for (ColoniaTO c : coloniaTO) {
			direccion += ", Col:";
			direccion += c.getNombre();

			MunicipioTO municipioTO = c.getMunicipioTO();

			direccion += ", Del:";
			direccion += municipioTO.getNombre();
		}

		direccion += ", Entre las Calles:";
		direccion += d.getEntreCalles();

		direccion += ", Otras Referencias:";
		direccion += d.getOtrasReferencias();

		ui.tableWidgetBitacora.setItem(renglon, 9, new QTableWidgetItem(
				direccion));

		// Direccion Origen
		d = bitacora.getListDireccionDestinoTO()[0];
		direccion = "";

		calleTO = d.getColoniaCalleTO().getListCalleTO();
		for (CalleTO c : calleTO) {
			direccion = c.getNombre() + ", #" + d.getNumero() + ", I"
					+ d.getInterior();
		}

		coloniaTO = d.getColoniaCalleTO().getListColoniaTO();
		for (ColoniaTO c : coloniaTO) {
			direccion += ", Col:";
			direccion += c.getNombre();

			MunicipioTO municipioTO = c.getMunicipioTO();

			direccion += ", Del:";
			direccion += municipioTO.getNombre();
		}

		direccion += ", Entre las Calles:";
		direccion += d.getEntreCalles();

		direccion += ", Otras Referencias:";
		direccion += d.getOtrasReferencias();

		ui.tableWidgetBitacora.setItem(renglon, 10, new QTableWidgetItem(
				direccion));

		ui.tableWidgetBitacora.setItem(renglon, 11, new QTableWidgetItem(
				bitacora.getListFormaPagoTO()[0].getNombre()));

		// factura
		QTableWidgetItem itemSi = new QTableWidgetItem("si");
		itemSi.setIcon(new QIcon(
				"classpath:mx/ipn/presentacion/recursos/iconos/ok.png"));
		QTableWidgetItem itemNo = new QTableWidgetItem("no");
		itemNo.setIcon(new QIcon(
				"classpath:mx/ipn/presentacion/recursos/iconos/cancel.png"));

		if (bitacora.getFactura())
			ui.tableWidgetBitacora.setItem(renglon, 12, itemSi);

		else
			ui.tableWidgetBitacora.setItem(renglon, 12, itemNo);

		ui.tableWidgetBitacora.setItem(renglon, 13, new QTableWidgetItem(
				bitacora.getObservaciones()));

		ui.tableWidgetBitacora.setItem(renglon, 14, new QTableWidgetItem(
				bitacora.getListUsuarioTelefonistaTO()[0].getNombreUsuario()));

		if (bitacora.getListUsuarioOperadoraTO() != null)
			ui.tableWidgetBitacora
					.setItem(renglon, 15, new QTableWidgetItem(bitacora
							.getListUsuarioOperadoraTO()[0].getNombreUsuario()));
		else
			ui.tableWidgetBitacora.setItem(renglon, 15,
					new QTableWidgetItem(""));

		if (bitacora.getListBitacoraChoferUnidadTO() != null) {
			PersonaTO chofer = bitacora.getListBitacoraChoferUnidadTO()[0]
					.getListChoferTO()[0];
			ui.tableWidgetBitacora.setItem(renglon, 16, new QTableWidgetItem(
					chofer.getNombre() + " " + chofer.getApellidoMaterno()
							+ " " + chofer.getApellidoMaterno()));
		} else
			ui.tableWidgetBitacora.setItem(renglon, 16,
					new QTableWidgetItem(""));

	}

	private void on_tableWidgetBitacora_customContextMenuRequested(QPoint p) {
		popupPoint = p;

		QMenu menu = new QMenu(this);
		menu.addAction(cancelarAction);
		//menu.addAction(editarAction);

		menu.exec(ui.tableWidgetBitacora.mapToGlobal(p));
	}

	private void editarServicio() {

	}

	private void createActions() {
		editarAction = new QAction(tr("&Editar Servicio"), this);
		editarAction.setShortcut(tr("Ctrl+E"));
		editarAction.setStatusTip(tr("Editar el servicio seleccionado."));
		editarAction.triggered.connect(this, "editarServicio()");

		cancelarAction = new QAction(tr("&Cancelar Servicio"), this);
		cancelarAction.setShortcut(tr("Ctrl+C"));
		cancelarAction.setStatusTip(tr("Cancela el servicio seleccionado."));
		cancelarAction.triggered.connect(this, "cancelarServicio()");
	}

	private void cancelarServicio() {
		QTableWidgetItem item = ui.tableWidgetBitacora.itemAt(popupPoint);

		int fila = ui.tableWidgetBitacora.rowAt(popupPoint.y());

		PeticionBitacoraServiciosPorRevisionTO p = new PeticionBitacoraServiciosPorRevisionTO();
		
		BitacoraServicioTO[] bitacoraServicioTO = new BitacoraServicioTO[1];
		bitacoraServicioTO[0] = obtenerBitacoraPorFila(fila);
		bitacoraServicioTO[0].setIdStatus((short) 2);

		short[] renglones = new short[1];
		renglones[0] = (short)fila;
		
		p.setBitacora(bitacoraServicioTO);
		p.setRenglon(renglones);
		
		ConexionConNegocios.invocaServicio("actualizarBitacoraServicios",
				p, TransferObject.class);

	}

	private BitacoraServicioTO obtenerBitacoraPorFila(int i) {
		BitacoraServicioTO to = new BitacoraServicioTO();

		to.setFechaEntrada(arrayListBitacora.get(i).getFechaEntrada());
		to.setFechaCaptura(arrayListBitacora.get(i).getFechaCaptura());
		to.setFechaAsignacion(arrayListBitacora.get(i).getFechaAsignacion());
		to.setFechaCubierto(arrayListBitacora.get(i).getFechaCubierto());

		to.setHoraEntrada(arrayListBitacora.get(i).getHoraEntrada());
		to.setHoraCaptura(arrayListBitacora.get(i).getHoraCaptura());
		to.setHoraAsignacion(arrayListBitacora.get(i).getHoraAsignacion());
		to.setHoraCubierto(arrayListBitacora.get(i).getHoraCubierto());

		to.setObservaciones(arrayListBitacora.get(i).getObservaciones());
		to.setFactura(arrayListBitacora.get(i).getFactura());
		to.setTelefono(arrayListBitacora.get(i).getTelefono());

		to.setIdUsuarioTelefonista(arrayListBitacora.get(i).getListUsuarioTelefonistaTO()[0]
				.getIdUsuario());

		if (arrayListBitacora.get(i).getListUsuarioOperadoraTO() != null)
			to.setIdUsuarioOperadora(arrayListBitacora.get(i).getListUsuarioOperadoraTO()[0]
					.getIdUsuario());

		to.setIdFormaPago(arrayListBitacora.get(i).getListFormaPagoTO()[0].getIdFormaPago());
		to.setIdCliente(arrayListBitacora.get(i).getListClienteTO()[0].getIdCliente());
		to.setIdDireccionDestino(arrayListBitacora.get(i).getListDireccionDestinoTO()[0]
				.getIdDireccion());
		to.setIdClienteDireccion(arrayListBitacora.get(i).getListClienteDireccionTO()[0]
				.getIdClienteDireccion());

		if (arrayListBitacora.get(i).getListBitacoraChoferUnidadTO() != null)
			to.setIdOperacionChofUni(arrayListBitacora.get(i)
					.getListBitacoraChoferUnidadTO()[0].getIdOperacion());
		to.setIdTipoServicio(arrayListBitacora.get(i).getListTipoServicioTO()[0]
				.getIdTipoServicio());

		to.setIdOperacion(arrayListBitacora.get(i).getIdOperacion());

		return to;
	}

	// llena el comboBox con las formas de pago
	private void llenarFormasPago() {
		FormaPagoTO[] formas = (FormaPagoTO[]) ConexionConNegocios
				.invocaServicio("obtenerFormasPago", FormaPagoTO[].class);

		for (FormaPagoTO f : formas)
			ui.comboBoxFormaDePago.addItem(f.getNombre());
	}

	private void llenarTiposServicio() {
		TipoServicioTO[] tipos = (TipoServicioTO[]) ConexionConNegocios
				.invocaServicio("obtenerTiposServicio", TipoServicioTO[].class);

		for (TipoServicioTO t : tipos)
			ui.comboBoxTipoServicio.addItem(t.getCategoriaServicioTO()
					.getNombre()
					+ " - "
					+ t.getSubcategoriaServicioTO().getNombre()
					+ " - "
					+ t.getFactorTO().getDescripcion());
	}

	// para mostrar el widget de abcdireccion
	private void mostrarWidgetABCDireccion() {
		if (abcDireccion == null)
			abcDireccion = new ABCDireccion();

		Utilerias.centrarVentana(abcDireccion);
		abcDireccion.show();

	}

	// para mostrar el widget de acliente
	private void mostrarWidgetAltaCliente() {
		if (aCliente == null)
			aCliente = new ACliente();

		Utilerias.centrarVentana(aCliente);
		aCliente.exec();
	}

	private void mostrarMapa() {
		// no windows
		if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") == -1) {

			String curDir = System.getProperty("user.dir");

			System.out.println(curDir);

			try {
				Process p = Runtime.getRuntime().exec("bin/Mapa/Linux/Mapa");
			} catch (Exception e) {
				e.printStackTrace();
			}

		}
		// windows
		else {
			try {
				Process p2 = Runtime.getRuntime().exec(
						"bin\\Mapa\\Windows\\Mapa.exe");
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	// para mostrar la consulta de bitacoras
	private void mostrarDialogBusquedaBitacora() {
		if (busquedaBitacora == null)
			busquedaBitacora = new BusquedaBitacora();

		busquedaBitacora.limpiaModelo();

		for (int i = 0; i < ui.tableWidgetBitacora.rowCount(); i++) {
			System.out.println(i);
			busquedaBitacora.agregaServicio(ui.tableWidgetBitacora.item(i, 0)
					.text(), ui.tableWidgetBitacora.item(i, 1).text(),
					ui.tableWidgetBitacora.item(i, 2).text(),
					ui.tableWidgetBitacora.item(i, 3).text(),
					ui.tableWidgetBitacora.item(i, 4).text(),
					ui.tableWidgetBitacora.item(i, 5).text(),
					ui.tableWidgetBitacora.item(i, 6).text(),
					ui.tableWidgetBitacora.item(i, 7).text(),
					ui.tableWidgetBitacora.item(i, 8).text(),
					ui.tableWidgetBitacora.item(i, 9).text(),
					ui.tableWidgetBitacora.item(i, 10).text(),
					ui.tableWidgetBitacora.item(i, 11).text(),
					ui.tableWidgetBitacora.item(i, 12).text(),
					ui.tableWidgetBitacora.item(i, 13).text(),
					ui.tableWidgetBitacora.item(i, 14).text(),
					ui.tableWidgetBitacora.item(i, 15).text(),
					ui.tableWidgetBitacora.item(i, 16).text());
		}

		Utilerias.centrarVentana(busquedaBitacora);
		busquedaBitacora.exec();
	}

	// para mostrar la bitacora
	private void mostrarWidgetBitacora() {
		ui.dockWidgetBitacora.setHidden(false);
	}

	// para mostrar el widget agregar servicio
	private void mostrarWidgetAgregarServicio() {
		ui.dockWidgetAgregarServicio.setHidden(false);
	}

	// para mostrar el widget agregar servicio
	private void mostrarWidgetChat() {
		if (chat == null)
			chat = new Chat();

		chat.show();
	}

	// invocado por la señal enter de lineEditTelefono
	private void slotLlenarClientes() {
		llenarClientes(ui.lineEditTelefono.text());
	}

	// para llenar los clientes segun el telefono
	private void llenarClientes(String telefono) {
		// Se vacia el combo box;
		ui.comboBoxNombre.clear();

		clientes = (ClienteTO[]) ConexionConNegocios.invocaServicio(
				"obtenerClientesPorTelefono", telefono, ClienteTO[].class);

		if (clientes[0].getTipoError() > 0)
			Utilerias.mostrarMensajeError(this, clientes[0]);

		else
			for (ClienteTO c : clientes) {
				// Se relaciona el proximo id del comboBox con el id del cliente
				mapaClientes.put(ui.comboBoxNombre.count(), c.getIdCliente());
				// Se agrega item al comboBox
				ui.comboBoxNombre.addItem(c.getApellidoPaterno() + " "
						+ c.getApellidoMaterno() + " " + c.getNombre());
			}
	}

	// para llenar las direcciones segun el cliente
	// el indice corresponde al id de cliente
	private void llenarDirecciones(int indice) {
		// Se vacia el combo box;
		ui.comboBoxOrigen.clear();
		ui.comboBoxDestino.clear();

		// Obtiene las direcciones asociadas al cliente con el indice
		// correspondiente
		clienteDireccionTO = (ClienteDireccionTO) ConexionConNegocios
				.invocaServicio("obtenerDirecciones", clientes[indice]
						.getIdCliente(), ClienteDireccionTO.class);
		direcciones = (DireccionTO[]) clienteDireccionTO.getListDireccionTO();

		// Se llena de nuevo el combo box

		int i = 0;
		for (DireccionTO d : direcciones) {
			String direccion = new String();

			CalleTO[] calleTO = d.getColoniaCalleTO().getListCalleTO();
			for (CalleTO c : calleTO) {
				direccion = c.getNombre() + ", #" + d.getNumero() + ", I"
						+ d.getInterior();
			}

			ColoniaTO[] coloniaTO = d.getColoniaCalleTO().getListColoniaTO();
			for (ColoniaTO c : coloniaTO) {
				direccion += ", Col:";
				direccion += c.getNombre();

				MunicipioTO municipioTO = c.getMunicipioTO();

				direccion += ", Del:";
				direccion += municipioTO.getNombre();
			}

			direccion += ", Entre las Calles:";
			direccion += d.getEntreCalles();

			direccion += ", Otras Referencias:";
			direccion += d.getOtrasReferencias();

			// Se relaciona el proximo id del comboBox con el id de la direccion
			mapaDirecciones.put(i, d.getIdDireccion());
			mapaClienteDireccion.put(i, clienteDireccionTO
					.getListIdClienteDireccion()[i]);

			ui.comboBoxOrigen.addItem(direccion);
			ui.comboBoxDestino.addItem(direccion);

			i++;
		}
	}

	public TelefonistaPrincipal(QWidget parent) {
		ui.setupUi(this);
	}

}
